/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package upeu.edu.pe.dao;

/**
 *
 * @author Administrador
 */
import upeu.edu.pe.modelo.SauAcceso;
import upeu.edu.pe.modelo.SauUsuario;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository("accesoDao")
public class SauAccesoDaoImpl implements SauAccesoDao {
        protected final Log logger = LogFactory.getLog(SauAccesoDaoImpl.class);  	
	@Autowired
        private SessionFactory sessionFactory;  
        
           /*     
	public void saveAcceso(SivAcceso acceso) {
	    try {
                String qry="insert into SIV_ACCESO(ID_MENU, NOMBRE, ORDEN, PAGINA) values('"+acceso.getIdMenu().getIdMenu()+"','"+acceso.getNombre()+"','"+acceso.getOrden()+"','"+acceso.getPagina()+"') ";
                sessionFactory.getCurrentSession().createSQLQuery(qry).executeUpdate(); 
               }
            catch (Exception e) { logger.info("Mensage de Error en saveAcceso() "+e.getMessage());   }
            finally{ sessionFactory.close(); }
	}
        */
	@SuppressWarnings("unchecked")
	public ArrayList<SauAcceso> listaNombreAcceso(){
        ArrayList<SauAcceso> resultado=new ArrayList<SauAcceso>();
        //List lista=null;
        //SivAcceso to=null;
	try {           
            resultado= (ArrayList<SauAcceso>) sessionFactory.getCurrentSession()
                    .createSQLQuery("select a.id_acceso, a.nombre, a.estado, a.url, a.descripcion, a a.nro_orden,  a.id_menu from sau_acceso a, sau_menu m where a.id_menu= m.id_menu order by m.alias asc, a.nro_orden ASC ")
                    .addEntity(SauAcceso.class)
                    .list();
           /* lista= (List) sessionFactory.getCurrentSession()
                    .createSQLQuery("select a.id_acceso, a.nombre, a.orden, a.pagina,  m.id_menu, m.nombre nombrem, m.alias aliasm from siv_acceso a, siv_menu m where a.id_menu= m.id_menu order by m.alias asc, a.orden ASC ")
                    .list();*/
            /* Iterator iterator = lista.iterator();
             while(iterator.hasNext()){
             Object[] tuple = (Object[]) iterator.next(); 
                to=new SivAcceso();
                to.setIdAcceso((String) tuple[0]);
                to.setNombre((String) tuple[1]);
                to.setOrden((String) tuple[2]);
                to.setPagina((String) tuple[3]);
                to.setNombremenu((String) tuple[5]);
                to.setOtros((String) tuple[6]);                
                resultado.add(to);
             }*/            
          }catch (Exception e) { logger.info("Mensage de Error en listaNombreAcceso() "+e.getMessage());   }
            finally{ sessionFactory.close(); }            
            return resultado;
	}
                
	@SuppressWarnings("unchecked")
	public ArrayList<SauAcceso> listaNombreAccesoUsuario(SauUsuario usuario){
        ArrayList<SauAcceso> resultado=new ArrayList<SauAcceso>();
//        List lista=null;
//        SivAcceso to=null;
	try {           
            resultado= (ArrayList<SauAcceso>) sessionFactory.getCurrentSession()
                    .createSQLQuery("select a.id_acceso, a.nombre, a.estado, a.url, a.descripcion, a.nro_orden,  a.id_menu  "
                    + "from sau_acceso a, sau_menu m "
                    + "where a.id_menu= m.id_menu and a.id_acceso in "
                    + "(select id_acceso from sau_privilegios where id_trabajador=? and state='1') "
                    + "order by m.alias asc, a.orden ASC ")
                    .addEntity(SauAcceso.class)
                    //.setString(0, usuario.getIdUsuario())
                    .list();
            
/*            lista= (List) sessionFactory.getCurrentSession()
                    .createSQLQuery("select a.id_acceso, a.nombre, a.orden, a.pagina,  m.id_menu, m.nombre nombrem, m.alias aliasm  "
                    + "from siv_acceso a, siv_menu m "
                    + "where a.id_menu= m.id_menu and a.id_acceso in "
                    + "(select id_acceso from siv_privilegio where id_trabajador=? and state='1') "
                    + "order by m.alias asc, a.orden ASC ")
                    .setString(0, trabajador.getIdTrabajador())
                    .list();
            */
           /*  Iterator iterator = lista.iterator();
             while(iterator.hasNext()){
             Object[] tuple = (Object[]) iterator.next(); 
                to=new SivAcceso();
                to.setIdAcceso((String) tuple[0]);
                to.setNombre((String) tuple[1]);
                to.setOrden((String) tuple[2]);
                to.setPagina((String) tuple[3]);
                to.setNombremenu((String) tuple[5]);
                to.setOtros((String) tuple[6]);                
                resultado.add(to);
             }      */      
            }catch (Exception e) { logger.info("Mensage de Error en listaNombreAccesoTrabajador() "+e.getMessage());   }
            finally{ sessionFactory.close(); }            
            return resultado;
	}
}
         /*
	@SuppressWarnings("unchecked")
	public ArrayList<SivAcceso> buscarNombreMenu(SivAcceso acceso){
        ArrayList<SivAcceso> resultado=null;
	try {           
            resultado= (ArrayList<SivAcceso>) sessionFactory.getCurrentSession()
                    .createSQLQuery("select a.id_acceso, a.nombre, a.orden, a.pagina,  a.id_menu "
                    + "from siv_acceso a, siv_menu m "
                    + "where a.id_menu= m.id_menu and upper(a.nombre) like upper(?) "
                    + "order by m.alias asc, a.orden ASC ")
                    .addEntity(SivAcceso.class)
                    .setString(0, "%"+acceso.getNombre()+"%")
                    .list();          
            }catch (Exception e) { logger.info("Mensage de Error en buscarNombreMenu() "+e.getMessage());   }
            finally{ sessionFactory.close(); }            
            return resultado;
	}*/
                
        

